<HTML>
<HEAD>
  <META HTTP-EQUIV="Content-Type" CONTENT="text/html;CHARSET=iso-8859-1">
  <TITLE>prog2aufg8</TITLE>
  <LINK rel=stylesheet type="text/css" media="screen" href="screen.css">
  <LINK rel=stylesheet type="text/css" media="print" href="print.css">
</HEAD>
<BODY>
<P><FONT SIZE="3">Hochschule Augsburg &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 13. 05. 2011<BR>
Fakult&auml;t f&uuml;r  Informatik<BR>
Prof. Meixner</FONT>
<H3> <FONT SIZE="3"><B>Praktikum Programmieren 2 im Studiengang Informatik</B></FONT> </H3>
<h3> <FONT SIZE="3"><B>Aufgabe 8</B></FONT> </h3>
<p><strong>Achtung:</strong> Die f&uuml;r die L&ouml;sung dieser Aufgabe ben&ouml;tigten Kenntnisse sind zum Ausgabezeitpunkt noch nicht alle in der Vorlesung behandelt. Die Bearbeitung sollte daher St&uuml;ck f&uuml;r St&uuml;ck mit dem Fortgang der Vorlesung realisiert werden.</p>
<P>Nun sollen Kontoausz&uuml;ge "ordentlich" formatiert abgeliefert werden,
  und zwar im gew&uuml;nschten Format des Bankkunden.
<P> Daf&uuml;r gibt es einen eigenen Dienst in der Bank. Die zugeh&ouml;rige
  Methode, nennen wir sie <CODE>getStatement()</CODE>, bekommt bei jeder
  Anforderung die Kontonummer, den Output-Stream, auf den der Kontoauszug
  ausgegeben werden soll und das gew&uuml;nschte Format &uuml;bergeben (evtl.
  auch ein Sortierkriterium, vgl. Aufg. 7). Das Format wird als MIME-Type-String
  spezifiziert (z. B. "text/plain").
<P> Setzen Sie zur Implementierung des Kontoauszugsdienstes das Abstract-Factory-Pattern ein. Es gibt also pro MIME-Typ eine eigene Formatierer-Klasse. Die Zuordnung zwischen MIME-TYPE und einer Instanz der richtigen Formatierer-Klasse soll &uuml;ber eine Map hergestellt werden. In einer ersten Implementierung k&ouml;nnen Sie diese Map einfach durch ein paar Code-Zeilen bef&uuml;llen. 
<P>Etwas flexibler (2. Schritt) werden Sie dadurch, dass Sie eine Property-Datei mit festem Namen anlegen, in der MIME-TYPE und Name der Formatiererklasse gegen&uuml;bergestellt werden, so dass - nach Lesen der Property-Datei - die Map durch dynamisches Klassenladen und Instanzieren gef&uuml;llt wird. Die Property-Datei muss nat&uuml;rlich so abgelegt werden, dass sie im Classpath des Programms liegt.
<P>Noch flexibler werden Sie dadurch, dass die Property-Datei keinen festen Namen haben muss, sondern deren Name als Wert einer System-Property beim Aufruf des Programms &uuml;bergeben wird.

<P> Neben <CODE>"text/plain"</CODE> sollte mindestens noch der MIME-Type <CODE>"text/html"</CODE> unterst&uuml;tzt werden.
<P> Falls aus irgendeinem Grund der gew&uuml;nschte Kontoauszug nicht erstellt
  werden kann, soll eine Exception geworfen werden.
<P> Binden Sie Aufrufe der neuen Methode <CODE>getStatement()</CODE> in Ihre
  Testumgebung ein. Der Output-Stream, auf den der Kontoauszug geschrieben
  wird, k&ouml;nnte im Rahmen dieser Testumgebung sinnvollerweise eine Datei
  sein.
<P> Wer sich dem Abstract-Factory-Pattern (noch nicht) gewachsen f&uuml;hlt,
  gehe einen direkteren Weg.
<P> Erweitern Sie anschlie&szlig;end die Kontoauszugserstellung in Richtung
  Internationalisierung.
<P> Es sollen dabei mindestens die zwei Locales <CODE>Locale.ENGLISH </CODE>und <CODE>Locale.GERMAN</CODE> unterst&uuml;tzt werden. D. h. abh&auml;ngig von
  dem Locale "spricht" eine Bank deutsch oder englisch. Im einfachsten Fall instanzieren Sie zwei Banken, eine deutsche, die nur Euro-Konten f&uuml;hrt und eine englische (oder amerikanische) mit Pfund- (bzw. Dollar-)Konten.
<P> Also:
<UL>
  <LI>Geldbetr&auml;ge und Datumsangaben werden entsprechend dem Locale formatiert.  
  <LI> Texte, die auf dem Kontoauszug erscheinen und in der Bank generiert werden,
    sollen in einem <CODE>ResourceBundle</CODE> vorgehalten werden (also im
    wesentlichen &Uuml;berschriften, aber nicht der Buchungsgrund, welcher ja
    vom Kunden kommt!).
</UL>
<P> Erstellen Sie zum Umrechnen von W&auml;hrungen einen eigenen Dienst als Methode in der Bank. Die Umrechnungskurse sollen in einer Datei abgelegt sein (einfaches Format nach Ihrer Wahl). Zu- und Abg&auml;nge auf ein Konto erfolgen somit immer in der W&auml;hrung, in der das Konto gef&uuml;hrt wird.
<h4>&nbsp;</h4>
<P>

<P>
<P><B>Abnahme: sp&auml;testens am 265. bzw. 30. 5.!</B>
</BODY></HTML>
